package spese.gestore.androidiani;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Vibrator;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AbsListView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;

/**
 * Questa classe estende Activity e lascia la possibilità all'utente di aggiungere o togliere una voce nello spinner categoria
 * @author Fusinato Lorenzo - Gruppo Androidiani
 * 
 *
 */

public class Aggiunta_Categoria extends Activity { 
	
	public ListView catLv;
	public Button save_cat;
	public EditText new_cat;
	public SimpleCursorAdapter adapter;
	public Cursor cu;
	public SpinnerDb db;
	
	public void onCreate(Bundle savedInstanceState) {
		
        super.onCreate(savedInstanceState);
        
        //Settare il layout principale della pagina
        setContentView(R.layout.layout_gestione_categorie);
        
        //Associo alla list view il suo id nel layout
        catLv=(ListView) findViewById(R.id.exLV_cat);
        
        //Il register serve per far si che se premo sulla List View capisce che deve fare qualcosa
        registerForContextMenu(catLv);
        
        //Associo il bottone 
        save_cat=(Button) findViewById(R.id.b_new_cat);
        
        //Associo l'editText
        new_cat = (EditText) findViewById(R.id.eT_new_cat);
        
        //Preparo i vari toast di allerta nel caso i campi editText siamo stati lasciati vuoti
	    final Toast toast_no_cat=Toast.makeText(this,"Nessuna Categoria da inserire",Toast.LENGTH_LONG);
	    
	    //Preparo un avviso acustico
	    final MediaPlayer mpAlert = MediaPlayer.create(this, R.raw.alert);
	    
	    //Preparo un avviso tramite vibrazione
	    final Vibrator vib = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
        
	    //Apriamo il db creato tramite MissioniDb a cui passo il contesto della classe attuale ovvero Lista_Missioni
        db=new SpinnerDb(getApplicationContext());
        
        //apriamo il db
        db.open();  
        
        //Popolo lo SpinnerDb se vuoto
        if(db.fetchSPINNER().getCount()==0){//inserimento dati, solo se il db è vuoto
            
            db.insertSpinner("Airplane");
            db.insertSpinner("Train");
            db.insertSpinner("Bus");
            db.insertSpinner("Taxi");
            db.insertSpinner("Hotel");
            db.insertSpinner("Food");
            db.insertSpinner("Logging");

             }
        
        //Chiamo la Query che in questo caso è un all
        cu=db.fetchSPINNER();
        
        //Comincio a fare il management del cursore
        startManagingCursor(cu);
     
        //Semplice cursor adapter
        adapter=new SimpleCursorAdapter(
                        this, //Contesto
                        R.layout.layout_list_cat, //il layout di ogni riga
                        cu, //Il cursore
                        new String[]{SpinnerDb.SpinnerMetaData.SPINNER_CAT_KEY},//questi colonne
                        new int[]{R.id.CatHeader});//in queste views
       
        //Ora la list view si prende questo adapter appena creato sopra
        catLv.setAdapter(adapter);
	    
        save_cat.setOnClickListener(new View.OnClickListener(){
			public void onClick(View v){
				
				//Setto su delle variabili tramite il metodo toString le stringhe prese dai vari editText
				String new_category = new_cat.getText().toString();
				
				//Ciclo if per controllare che i campi editText non siano vuoti
				if (new_category.length()==0) {toast_no_cat.show();  //Mostra il toast
											   mpAlert.start();  //Fa partire l'alert acustico
											   vib.vibrate(300);  //Fa partire la vibrazione di 300ms
											   return ;} //Il return fa uscire dall'if e quindi blocca il pulsante
				
				db.insertSpinner(new_category);
				
				cu.requery();
				
				//Chiudo il db perchè ho finito di riempire la mia list view
		        db.close();
			}
        });
			
	}

	/**
	 * Metodo che serve per captare uno scroll da parte dell'utente
	 * @param view
	 * @param scrollState
	 */
	public void onScrollStateChanged(AbsListView view, int scrollState) {
	    
	   }
	   
	 
	/**
	 * Metodo per definire l'azione da intraprendere al scroll da parte dell'utente
	 * @param view
	 * @param firstVisibleItem
	 * @param visibleItemCount
	 * @param totalItemCount
	 */
	public void onScroll(AbsListView view, int firstVisibleItem,
	     int visibleItemCount, int totalItemCount) {
		 
		((BaseAdapter) adapter).notifyDataSetChanged();
		
	   }

	/** 
	 * Quando sul telefono viene premuto il tasto return viene distrutta la istanza salvata e inviato un null che fa ricaricare il tutto
	 * @see android.app.Activity#onResume()
	 */
	public void onResume(){
		onCreate(null);
	}
	
	/**
     * Con questo metodo impongo al device che al tasto "back" parta un alert dialog x chiedere la conferma della chiusura del programma
     */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK)) {
        	//Chiudo il db perchè ho finito di riempire la mia list view
	        db.close();
        	Intent intent=new Intent (Aggiunta_Categoria.this,Menu_Opzioni.class);
			startActivity(intent);
            return false;
        }
        return super.onKeyDown(keyCode, event);
    }
	
    
} 
//Fine dell'activity'